home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
BCI NET
/
BCI NET Dec 94.iso
/
archives
/
programming
/
c
/
metre.lha
/
metreint.h
< prev
next >
Wrap
C/C++ Source or Header
|
1994-09-07
|
6KB
|
160 lines
/*************************************************************
Copyright (c) 1993,1994 by Paul Long All rights reserved.
**************************************************************/
/*************************************************************
metreint.h - This header file contains #defines,
typedefs, and externs that are used
exclusively by the parser. The rules
code does not need access to these.
**************************************************************/
#ifndef _METREINT_H_
#define _METREINT_H_
#include <string.h>
#include <stddef.h>
#include "metre.h"
#define metre_version "1.08"
/* General-purpose macros. */
/*
Number of dimensions in array. E.g., the following prints 10:
int a[10]; printf("%d\n", DIM_OF(a));
*/
#define DIM_OF(x) (sizeof (x) / sizeof (x[0]))
/* Sets the object, x, to 0. */
#define ZERO(x) memset((void *)&x, 0, sizeof x)
/*
This determines whether the input is buffered by reading in a line at a
time. Set it to either TRUE or FALSE (1 or 0). You can either do it here
or on the compilation command line, e.g., -DREAD_LINE=0. The command
line takes precedence over whatever is specified here.
There are two reasons why you might want to turn off input buffering.
1. It may not work properly with the version of lex you are using.
Although I tried to make Metre compatible with flex, I have my
doubts about it. 2. If input buffering is enabled, Metre will
display the input line along with many error messages. If this is a
preprocessed file, the line may be misleading because it may look
nothing like the original source line after macro replacement has
taken place. It, therefore, may be better to just never display the
input line. You decide.
*/
#ifndef READ_LINE
#define READ_LINE TRUE
#endif
/*
Add defines for new internal error messages here.
NOTE: 0 is reserved for yyerror() and error messages that YACC generates.
*/
#define E_NO_HEAP 1, "Out of heap space"
#define E_LINE_TYPE 2, "Invalid line type"
#define E_CANT_OPEN_LISTING_FILE 3, "Cannot open listing file"
/* Add defines for new internal warning messages here. */
#define W_CANNOT_OPEN_FILE 0, "Cannot open %s"
/*
Number of typedef symbols that each typedef-symbol block can hold. New
blocks are allocated on an as-needed basis so that the symbol table is not
a fixed size.
*/
#define TYPEDEF_SYMBOLS_PER_BLOCK 1000
/* Characters used to identify command-line options. */
#define DEFINE_OPT_CHAR 'D' /* Translate this identifier. */
#define LISTING_OPT_CHAR 'L' /* Name of listing file to contain output.*/
#define COPY_INPUT_OPT_CHAR 'C' /* Copy input to standard out. */
#define SUBST_FILE_OPT_CHAR 'S' /* Substitute file name. */
#define OPT_INTRO_CHARS "/-" /* Command-line option-introduction characters. */
/* (Lex's maximum lexeme length--YYLMAX.) */
#define MAX_DECLARATOR_NAME_LEN 100
/* typedef for IDENTIFIER array. */
typedef char IDENTIFIER[MAX_DECLARATOR_NAME_LEN];
/*
NOTE: External names that are intended to only be used within the parser
are mangled somewhat by prepending "mtr_" to reduce the possibility of
collision between names in rules code and parser code. These #defines
could all be removed if this is not a concern.
*/
#define mod_decisions mtr_mod_decisions
#define mod_functions mtr_mod_functions
extern unsigned mod_decisions;
extern unsigned mod_functions;
#define cmd_line_argc mtr_cmd_line_argc
#define cmd_line_argv mtr_cmd_line_argv
#define input_file mtr_input_file
#define input_file_orig_name mtr_input_file_orig_name
#define next_cmd_line_file mtr_next_cmd_line_file
#define next_cmd_line_file_orig_n mtr_next_cmd_line_file_orig_n
#define column mtr_column
#define display_input mtr_display_input
#define looking_for_tag mtr_looking_for_tag
extern int cmd_line_argc;
extern char **cmd_line_argv;
extern FILE *yyin;
extern int yylineno;
extern FILE *yyout;
extern char *input_file;
extern char *input_file_orig_name;
extern unsigned next_cmd_line_file;
extern unsigned next_cmd_line_file_orig_n;
extern BOOLEAN display_input;
extern BOOLEAN looking_for_tag;
#define int_prj mtr_int_prj
#define int_mod mtr_int_mod
#define int_lin mtr_int_lin
#define int_lex mtr_int_lex
extern PRJ int_prj;
extern MOD int_mod;
extern LIN int_lin;
extern LEX int_lex;
#define get_next_input_file mtr_get_next_input_file
#define get_next_input_file_orig_name mtr_get_next_input_file_orig_name
#define typedef_symbol_table_find mtr_typedef_symbol_table_find
#define init_lex mtr_init_lex
#define init_yacc mtr_init_yacc
#define fire_prj mtr_fire_prj
#define fire_mod mtr_fire_mod
#define fire_lin mtr_fire_lin
#define fire_lex mtr_fire_lex
extern char *get_next_input_file(unsigned *p_i);
extern char *get_next_input_file_orig_name(unsigned *p_i);
extern BOOLEAN typedef_symbol_table_find(char *);
extern void init_lex(void);
extern void init_yacc(void);
extern void fire_prj(void);
extern void fire_mod(void);
extern void fire_lin(void);
extern void fire_lex(void);
#ifdef DEBUG_TYPEDEF
extern void typedef_symbol_table_dump(void);
#endif
#endif